A heterogeneous computing system (HCS) refers to a type of data processing system that includes a host processor and one or more other different processing devices. The host processor, or “host,” is typically implemented as a central processing unit (CPU). The host is coupled to the other processing devices through interface circuitry such as a bus. The other processing devices are architecturally different from the host. Still, the processing devices are capable of performing functions offloaded from the host and making results available to the host.
Within some HCSs, the processing devices are adapted to execute program code. Such processing devices typically utilize an instruction set architecture that differs from the host. Examples of these processing devices include, but are not limited to, graphics processing unit(s) (GPUs), digital signal processor(s) (DSPs), and so forth. In some HCSs, the processing devices that perform functions offloaded by the host include processing devices adapted to hardware accelerate the functions. These processing devices include circuitry that implements the offloaded program code (functions). The circuitry is functionally equivalent to an executable version of the offloaded program code. Examples of processing devices capable of hardware acceleration include programmable integrated circuits (ICs) such as field programmable gate arrays (FPGAs), partially programmable ICs, application specific ICs (ASICs), and so forth. Appreciably, an HCS may include a combination of processing devices where one or more are adapted to execute program code and one or more others are adapted to hardware accelerate program code.
The host is charged with offloading tasks to the processing devices and retrieving results from the processing devices. Thus, the ability of the host to efficiently move the necessary data to and from the processing devices can significantly affect the overall efficiency and performance of the HCS.